package main

import "fmt"

func main() {
	//	 go 语言的数组和Python的 list可以对应起来理解    slice 和 python 的list 更像
	//	 静态语言中的数组 ： 1. 大小确定 2. 类型一致

	//var courses [10]string
	//var courses1 [10] string = [5]string{"django","tornado"}     // 两边需要保持一致
	//var courses2 = [5]{"django","flask","scrapy"}

	courses3 := [5]string{"django", "flask"}

	//	1. 修改值 取值
	//	 2 .删除，某一个值，不支持  ，数组一开始就指定了大小
	fmt.Println(courses3[0])

	//	 修改值
	courses3[0] = "django"
	courses3[2] = "gin"
	courses3[4] = "beego"
	//courses3[5] = "sanic"  //无效的 数组 索引 '5' (5 元素的数组超出界限)

	// 数组的另一种创建方式
	var f1 = [4]float32{1.0}
	fmt.Println(f1)

	var c = [5]int{'A', 'B'}

	fmt.Println(c)

	// 省略号
	d := [...]int{1, 2, 3, 4, 5}
	fmt.Println(d)

	e := [5]int{4: 100} // 第四个下标设置为100
	fmt.Println(e)

	f := [...]int{0: 1, 4: 1, 9: 100}
	fmt.Println(f)

	// 数组操作第一种场景 ： 求长度
	fmt.Println(len(f))

	//数组的第二种场景： 遍历数组
	for i, value := range courses3 {
		fmt.Println(i, value)
	}

	// 使用for range 求和
	sum := 0
	for _, value := range f {
		sum += value
	}
	fmt.Println(sum)

	//使用 for 语句也可以遍历数组
	sum2 := 0
	for i := 0; i < len(f); i++ {
		sum2 += f[i]
	}
	fmt.Println(sum2)

	// 数组是值类型

	coursesA := [5]string{"django", "flask"}
	coursesB := [...]string{"djano1", "flask2", "gin", "beego"}

	// 在go 中 courseA/B 都是数组 但是不是同一种类型

	fmt.Printf("%T\n", coursesA)
	fmt.Printf("%T\n", coursesB)
	//长度不一样 不是同一种
	printArray(coursesA) // 数组作为参数，实际传递的是值传递
	fmt.Println("coursesA", coursesA)

}

func printArray(toprint [5]string) {
	toprint[0] = "lewen"
	fmt.Println("inner toprint", toprint)
}
